import createElement from './createElement';
import updateChildren from './updateChildren';

// TODO: 同一个节点时，进行判断分析
export default function patchVnode (oldVnode, newVnode) {
    // 1 判断是否是同一个对象
    if (oldVnode === newVnode) return;
    // 2 判断 newVnode 是否有text属性
    if (newVnode.text) {
        // 与 oldVnode 的text属性不相等
        if (newVnode.text != oldVnode.text) {
            // 改变节点文本值
            oldVnode.elm.innerText = newVnode.text
            // 给新节点添加elm
            newVnode.elm = oldVnode.elm
        }
    }
    // 3 newVnode 有子节点（children属性）,判断 oldVnode 有没有children属性
    else {
        // 覆盖旧虚拟节点
        if (oldVnode.text) {
            let newDOM = createElement(newVnode)
            let parent = oldVnode.elm.parentNode
            // 给新节点添加elm
            newVnode.elm = newDOM
            // 插入新节点并移除老节点
            parent.removeChild(oldVnode.elm)
            parent.appendChild(newDOM)
        }
        else {
            // 精细化比较更新
            updateChildren(oldVnode.elm, oldVnode.children, newVnode.children)
        }
    }
}

